#编程时经常需要检查一系列条件，并据此决定采取什么措施。在Python中，if语句让你能够检查程序的当前状态，并据此采取相应的措施。
#一个简单示例下面是一个简短的示例，演示了如何使用if语句来正确地处理特殊情形。假设你有一个汽车列表，并想将其中每辆汽车的名称打印出来。对于大多数汽车，都应以首字母大写的方式打印其名称，但对于汽车名'bmw'，应以全大写的方式打印。下面的代码遍历一个列表，并以首字母大写的方式打印其中的汽车名，但对于汽车名'bmw'，以全大写的方式打印：
cars = ['audi','bmw','subaru','toyota']
for car in cars:
    if car == 'bmw':
        print(car.upper())
    else:
        print(car.title())
#这个示例中的循环首先检查当前的汽车名是否是'bmw'（见❶）。如果是，就以全大写的方式打印它；否则就以首字母大写的方式打印：
# Audi
# BMW
# Subaru
# Toyota

# 条件测试每条if语句的核心都是一个值为True或False的表达式，这种表达式被称为条件测试。Python根据条件测试的值为True还是False来决定是否执行if语句中的代码。如果条件测试的值为True,Python就执行紧跟在if语句后面的代码；如果为False,Python就忽略这些代码。

# 在Python中检查是否相等时区分大小写，例如，两个大小写不同的值会被视为不相等：
# >>>car = 'Audi'
# >>>car == 'audi'
# False
# 网站采用类似的方式让用户输入的数据符合特定的格式。例如，网站可能使用类似的测试来确保用户名是独一无二的，而并非只是与另一个用户名的大小写不同。用户提交新的用户名时，将把它转换为小写，并与所有既有用户名的小写版本进行比较。执行这种检查时，如果已经有用户名'john'（不管大小写如何），则用户提交用户名'John'时将遭到拒绝。

#要判断两个值是否不等，可结合使用惊叹号和等号(!=)，其中的惊叹号表示不，在很多编程语言中都如此。

# 检查多个条件你可能想同时检查多个条件，例如，有时候你需要在两个条件都为True时才执行相应的操作，而有时候你只要求一个条件为True时就执行相应的操作。在这些情况下，关键字and和or可助你一臂之力。
# 使用and检查多个条件要检查是否两个条件都为True，可使用关键字and将两个条件测试合而为一；如果每个测试都通过了，整个表达式就为True；如果至少有一个测试没有通过，整个表达式就为False。
# 例如，要检查是否两个人都不小于21岁，可使用下面的测试：
# >>>age_0 = 22 ❶
# >>>age_1 = 18
# >>>age_0 >= 21 and age_1 >= 21 ❷
# False
# >>>age_1 = 22 ❸
# >>>age_0 >= 21 and age_1 >= 21
# True

# 在❶处，我们定义了两个用于存储年龄的变量：age_0和age_1。在❷处，我们检查这两个变量是否都大于或等于21；左边的测试通过了，但右边的测试没有通过，因此整个条件表达式的结果为False。在❸处，我们将age_1改为22，这样age_1的值大于21，因此两个测试都通过了，导致整个条件表达式的结果为True。

# 使用or检查多个条件关键字or也能够让你检查多个条件，但只要至少有一个条件满足，就能通过整个测试。仅当两个测试都没有通过时，使用or的表达式才为False。下面再次检查两个人的年龄，但检查的条件是至少有一个人的年龄不小于21岁：
# >>>age_0 = 22 ❶
# >>>age_1 = 18
# >>>age_0 >= 21 or age_1 >= 21 ❷
# True
# >>>age_0 = 18 ❸
# >>>age_0 >= 21 or age_1 >= 21
# False
# 同样，我们首先定义了两个用于存储年龄的变量（见❶）。由于❷处对age_0的测试通过了，因此整个表达式的结果为True。接下来，我们将age_0减小为18；在❸处的测试中，两个测试都没有通过，因此整个表达式的结果为False。

# 检查特定值是否不包含在列表中还有些时候，确定特定的值未包含在列表中很重要；在这种情况下，可使用关键字not in。例如，如果有一个列表，其中包含被禁止在论坛上发表评论的用户，就可在允许用户提交评论前检查他是否被禁言：
banned_users = ['andrew','carolina','david']
user = 'marie'
if user not in banned_users:
    print(user.title()+",you can post a response if you wish.")
    
#布尔表达式随着你对编程的了解越来越深入，将遇到术语布尔表达式，它不过是条件测试的别名。与条件表达式一样，布尔表达式的结果要么为True，要么为False。
# 布尔值通常用于记录条件，如游戏是否正在运行，或用户是否可以编辑网站的特定内容：
game_active = True
can_edit = False

# if-else语句经常需要在条件测试通过了时执行一个操作，并在没有通过时执行另一个操作；在这种情况下，可使用Python提供的if-else语句。if-else语句块类似于简单的if语句，但其中的else语句让你能够指定条件测试未通过时要执行的操作。
age = 17
if age >= 18:
    print("You are old enough to vote!")
    print("Have you registered to vote yet?")
else:
    print("Sorry,you are too young to vote.")
    print("Please register to vote as soon as you turn 18!")
# 上述代码之所以可行，是因为只存在两种情形：要么够投票的年龄，要么不够。if-else结构非常适合用于要让Python执行两种操作之一的情形。在这种简单的if-else结构中，总是会执行两个操作中的一个。

# if-elif-else结构经常需要检查超过两个的情形，为此可使用Python提供的if-elif-else结构。Python只执行if-elif-else结构中的一个代码块，它依次检查每个条件测试，直到遇到通过了的条件测试。测试通过后，Python将执行紧跟在它后面的代码，并跳过余下的测试。在现实世界中，很多情况下需要考虑的情形都超过两个。例如，来看一个根据年龄段收费的游乐场：
age = 12
if age <4:
    print("Your admission cost is $0.")
elif age <18:
    print("Your admission cost is $5.")
else:
    print("Your admission cost is $10.")
# 处的if测试检查一个人是否不满4岁，如果是这样，Python就打印一条合适的消息，并跳过余下的测试。❷处的elif代码行其实是另一个if测试，它仅在前面的测试未通过时才会运行。在这里，我们知道这个人不小于4岁，因为第一个测试未通过。如果这个人未满18岁，Python将打印相应的消息，并跳过else代码块。如果if测试和elif测试都未通过，Python将运行❸处else代码块中的代码。

# 使用多个elif代码块可根据需要使用任意数量的elif代码块，例如，假设前述游乐场要给老年人打折，可再添加一个条件测试，判断顾客是否符合打折条件。下面假设对于65岁（含）以上的老人，可以半价（即5美元）购买门票
age = 12
if age <4:
    price = 0
elif age <18:
    price = 5
elif age <65:
    price = 10
else:
    price = 5
print("Your admission cost is $"+str(price)+".")

# 略else代码块Python并不要求if-elif结构后面必须有else代码块。在有些情况下，else代码块很有用；而在其他一些情况下，使用一条elif语句来处理特定的情形更清晰：
# else是一条包罗万象的语句，只要不满足任何if或elif中的条件测试，其中的代码就会执行，这可能会引入无效甚至恶意的数据。如果知道最终要测试的条件，应考虑使用一个elif代码块来代替else代码块。这样，你就可以肯定，仅当满足相应的条件时，你的代码才会执行。

# 测试多个条件if-elif-else结构功能强大，但仅适合用于只有一个条件满足的情况：遇到通过了的测试后，Python就跳过余下的测试。这种行为很好，效率很高，让你能够测试一个特定的条件。然而，有时候必须检查你关心的所有条件。在这种情况下，应使用一系列不包含elif和else代码块的简单if语句。在可能有多个条件为True，且你需要在每个条件为True时都采取相应措施时，适合使用这种方法。下面再来看前面的比萨店示例。如果顾客点了两种配料，就需要确保在其比萨中包含这些配料：
requested_toppings = ['mushrooms','extra cheese'] 
if 'mushrooms'in requested_toppings:
    print("Adding mushrooms.")
if 'pepperoni'in requested_toppings:
    print("Adding pepperoni.")
if 'extra cheese'in requested_toppings:
    print("Adding extra cheese.")
print("\nFinished making your pizza!")
# 如果像下面这样转而使用if-elif-else结构，代码将不能正确地运行，因为有一个测试通过后，就会跳过余下的测试：
# 我们首先创建了一个列表，其中包含顾客点的配料（见❶）。❷处的if语句检查顾客是否点了配料蘑菇('mushrooms')，如果点了，就打印一条确认消息。❸处检查配料辣香肠('pepperoni')的代码也是一个简单的if语句，而不是elif或else语句；因此不管前一个测试是否通过，都将进行这个测试。❹处的代码检查顾客是否要求多加芝士('extra cheese')；不管前两个测试的结果如何，都会执行这些代码。每当这个程序运行时，都会进行这三个独立的测试。在这个示例中，会检查每个条件，因此将在比萨中添加蘑菇并多加芝士：